package com.developer.persistence.modulo.grupos;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.developer.core.utils.SimpleLogger;
import com.developer.logic.modulo.grupos.dto.Fase;
import com.developer.logic.modulo.grupos.dto.Grupo;
import com.developer.mybatis.DBManager;
import com.developer.persistence.modulo.grupos.mapper.dao.GrupoDao;

public class GrupoControllerDB {
	
	private static GrupoControllerDB instance;
	
	public static GrupoControllerDB getInstance() {
		if (instance == null) {
			instance = new GrupoControllerDB();
		}
		
	
		return instance;
	}
	
	public List<Fase> getFases(){
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			List<Fase> list = GrupoMapper.getFases();

			return list;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getFases", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
		
	}
	
	public List<Fase> getFasesActivas(){
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			List<Fase> list = GrupoMapper.getFasesActivas();

			return list;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getFasesActivas", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
		
	}

	public Grupo getGrupo(Long grupo){
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			Grupo grupoConsultado = GrupoMapper.getGrupo(grupo);

			return grupoConsultado;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getGrupo", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
		
	}
	
	public Fase getFase(Long fase){
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			Fase faseConsultado = GrupoMapper.getFase(fase);

			return faseConsultado;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getFase", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
	}

	
	public boolean crearGrupoTransaccional(SqlSession session, Grupo grupo) {
		try{
			GrupoDao grupoDao = session.getMapper(GrupoDao.class);
			
			//Se crea el grupo
			grupoDao.crearGrupo(grupo);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearGrupoTransaccional", e);
			return false;
		}
	} 
	
	public Long getSiguienteIDGrupo(){
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			Long id = GrupoMapper.getSiguienteIDGrupo();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDGrupo", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
	}

	public List<Grupo> getGrupos() {
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			List<Grupo> grupos = GrupoMapper.getGrupos();

			return grupos;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getGrupos", e);
			
			return null;
			
		} finally {
			session.close();
		}
	}
	
	public List<Grupo> getGruposPorFase(Fase fase) {
		SqlSession session = DBManager.openSession();

		try {

			GrupoDao GrupoMapper = session.getMapper(GrupoDao.class);
			List<Grupo> grupos = GrupoMapper.getGruposPorFase(fase);

			return grupos;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getGruposPorFase", e);
			
			return null;
			
		} finally {
			session.close();
		}
	}
	
	public boolean inactivarFaseTransaccional(SqlSession session, Fase fase) {
		try{
			GrupoDao grupoDao = session.getMapper(GrupoDao.class);
			
			//Se crea el grupo
			grupoDao.inactivarFase(fase);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error inactivarFaseTransaccional", e);
			return false;
		}
	} 
	
}
	